package co.edu.uniquindio.sicorrespondencia.ejb;

import java.util.List;

import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import co.edu.uniquindio.sicorrespondencia.entities.Area;
import co.edu.uniquindio.sicorrespondencia.entities.Departamento;
import co.edu.uniquindio.sicorrespondencia.entities.Docente;
import co.edu.uniquindio.sicorrespondencia.entities.Empresa;
import co.edu.uniquindio.sicorrespondencia.entities.Municipio;
import co.edu.uniquindio.sicorrespondencia.entities.Prorroga;
import co.edu.uniquindio.sicorrespondencia.entities.TrabajoGrado;
import co.edu.uniquindio.sicorrespondencia.enums.EstadoPropuesta;
import co.edu.uniquindio.sicorrespondencia.enums.Modalidad;
import co.edu.uniquindio.sicorrespondencia.enums.Tipo;
import co.edu.uniquindio.sicorrespondencia.interfaz.IListaLocal;

@Stateful
@Name("listaBean")
@Scope(ScopeType.SESSION)
public class ListaBean implements IListaLocal {

	@In
	private EntityManager entityManager;

	@SuppressWarnings("unchecked")
	@Factory("listaEmpresas")
	public List<Empresa> obtenerEmpresas() {
		List<Empresa> empresas = entityManager.createNamedQuery(
				"buscarEmpresas").getResultList();
		return empresas;

	}

	@SuppressWarnings("unchecked")
	@Factory("listaAreas")
	public List<Area> obtenerAreas() {
		List<Area> Areas = entityManager.createQuery("select d from Area d")
				.getResultList();
		return Areas;
	}

	@SuppressWarnings("unchecked")
	@Factory("listaDocentesTG")
	public List<Docente> obtenerDocentes() {
		List<Docente> docentes = entityManager.createQuery(
				"select d from Docente d").getResultList();
		return docentes;
	}

	@Factory("listaEstadosTG")
	public EstadoPropuesta[] obtenerEstados() {

		return EstadoPropuesta.values();
	}

	@Factory("listaModalidadTG")
	public Modalidad[] obtenerModalidades() {

		return Modalidad.values();
	}

	@Factory("listaTipos")
	public Tipo[] obtenerTipos() {

		return Tipo.values();
	}

	@Remove
	public void remove() {
		// TODO Auto-generated method stub

	}

	@Destroy
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@SuppressWarnings("unchecked")
	@Factory("listaMunicipios")
	public List<Municipio> listarMunicipios() {
		List<Municipio> municipios = entityManager.createQuery(
				"select m from Municipio m").getResultList();
		return municipios;
	}

	@SuppressWarnings("unchecked")
	@Factory("listaDepartamentos")
	public List<Departamento> listarDepartamentos() {
		List<Departamento> departamentos = entityManager.createQuery(
				"select d from Departamento d").getResultList();
		return departamentos;
	}

	@SuppressWarnings("unchecked")
	@Factory("listaProrrogas")
	public List<Prorroga> listarProrrogas() {
		List<Prorroga> prorrogas = entityManager.createQuery(
				"select p from Prorroga p").getResultList();
		return prorrogas;
	}

	@SuppressWarnings("unchecked")
	@Factory("listaTgs")
	public List<TrabajoGrado> obtenerTGs() {
		List<TrabajoGrado> tgs = entityManager.createQuery(
				"select p from TrabajoGrado p").getResultList();
		return tgs;
	}

}
